Resource pools can be used to hierarchically partition available resources in a host computer cluster, which include, for example, CPU resources and memory resources. A parent resource pool can contain one or more child resource pools, one or more resource-consuming clients, such as virtual machines (VMs), or both. Resource pools and clients that are at the same level of a resource allocation hierarchy are called siblings.
Resource allocation techniques for computer systems with resource-consuming clients, such as VMs, are important to ensure that the clients are operating at desired or target levels. For example, if a VM is powered on a host computer or migrated to a host computer, a resource allocation element needs to generate resource allocation settings of the VM such that appropriate resources can be assigned to the VM. Conventional resource allocation techniques generally do not automatically allow a client to inherit the resource allocation priority of a parent resource pool that contains the client. For example, due to sibling rivalry within a resource pool, conventional resource allocation techniques may not designate a client in a resource pool with a higher resource allocation priority with higher priority for resource allocation than a client in a resource pool with a lower resource allocation priority. In addition, conventional resource allocation techniques generally do not guarantee a client a minimum amount of resources. For example, if a client with a relatively large resource allocation requirement (e.g., a VM with 16 virtual CPU (vCPU) and 1 TB memory) is placed next to a resource pool containing other clients at the same level of a resource allocation hierarchy, the client with the relatively large resource allocation requirement can deprive the clients inside the resource pool of resources and cause a denial of service for the clients inside the resource pool.